/*
 *
 * 名称：罗盘
 * 功能：专让负责画罗盘
 * 作者：清河张
 * 时间：2025.05.24
 *
 */
#ifndef LUOPAN_H
#define LUOPAN_H
#include <QGraphicsScene>
#include <QPainterPath>
#include <QGraphicsTextItem>

qreal ratioToRadians(qreal ratio); //一圈比例，转成弧度
qreal divToRadians(qreal div); //分段，转成弧度

struct WYLQRINGITEM
{
    qreal _cx, _cy, _d1, _d2, _r1, _r2, _r;
    //设置基本变量
    void setbase(qreal r1, qreal thikness);
    //生成环图
    void putPath(qreal startRadians, qreal arcRadians, QPainterPath& path);
    //生成文字
    void putTextItem(qreal angleTextRadians, QGraphicsTextItem* textItem);
    //弧度对应坐标
    void angleToPos(qreal radians, qreal &nx, qreal &ny);
    //弧度、字数确定文字像素
    qreal fontpixels(qreal radians, int ntext);
};

class LUOPAN
{
public:
    struct SHENFU//神符
    {

        qreal _startRadians;//初始角度
        int _yy : 1;//阴阳，指天、地盘
        int _ntext : 6;//字数
        int _resv : 25;

        std::vector<QString> _strs;//符号集
        struct TISHI
        {
            qreal _offsetRadians;//相对偏移弧度
            QString _name;//名称
        };

        std::vector<TISHI> _tishi;//提示
    };

    typedef std::map<int,SHENFU> SHENPAN;

    LUOPAN(QGraphicsScene * ss);
    void huashen( const SHENPAN& );//画神
    void huafu(const SHENFU& shenattr, WYLQRINGITEM& itemtmp, qreal r1, qreal thiknees);//画符（号）
private:
    QGraphicsScene * _ss;//罗盘场景
};

#endif // LUOPAN_H
